package com.city.itis.action;

import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import com.city.itis.domain.Hobby;
import com.city.itis.domain.Member;
import com.city.itis.domain.SiteCategory;
import com.city.itis.domain.User;
import com.city.itis.service.HobbyService;
import com.city.itis.service.MemberService;
import com.city.itis.service.SiteCategoryService;
import com.city.itis.service.UserService;
import com.city.itis.util.Constants;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * AdminAction
 * @author WY
 *
 */
public class AdminAction extends ActionSupport
{
	private static final long serialVersionUID = 1L;	//系统自动生成的版本序列号
	
	private List<SiteCategory> siteCategoryList=null;	//声明siteCategoryList对象
	
	private SiteCategoryService siteCategoryService=null;	//声明siteCategoryService对象

	private String id=null;	//定义字符串类型变量id
	
	private String password=null;	//定义字符串类型变量password
	
	private String loginType=null;	//定义字符串类型变量loginType
	
	private UserService userService=null;	//申明userService对象
	
	private MemberService memberService=null; 	//申明memberService对象
	
	private HobbyService hobbyService=null;		//申明hobbyService对象
	
	private List<Hobby> hobbyList=null;		//申明hobbyList对象
	
	private String url;		//定义字符串类型变量url,用于存放转向地址的。
	
	Map<String,Object>map=null;		//申明Map类型对象map
	
	/**
	 * 登陆方法
	 * @return
	 * @throws Exception
	 */
	public String login()throws Exception
	{
		map=ActionContext.getContext().getSession();	//取得Session对象方法
		if(Constants.MEMBER.equals(loginType))	//会员登陆
		{
			Member member=memberService.login(id, password);	//根据会员编号和密码，调用login方法。
			
			if(member!=null)	//登陆成功
			{
				
				Integer loginCount=member.getLoginCount();	//取得会员登陆次数
				Integer memberLevel=member.getLevel();	//会员级别
				if(memberLevel==null)	//如何取得得会员级别属性为null，就将该属性设置为1。
				{
					memberLevel=1;
				}
				
				if(loginCount==null)		//会员从来没有登陆过系统
				{
					loginCount=1;	//将loginCount=1
				}else
				{
					Date loginDate=new Date();
					long i=loginDate.getTime()-member.getLastLoginDate().getTime();
					//判断是否一天之后登陆
					if(i>43200000)
					{
						loginCount++;	//loginCount=loginCount+1
					}
				}
				
				if(loginCount>Constants.LOGINCOUNT)	//如何会员登录次数超过2000次，会员将会升级级别。
				{
					
						memberLevel++;
						
					
				}
					
				member.setLastLoginDate(new Date());	//设置会员本次登陆时间，作为会员最近的最后一次登陆时间。
				member.setMemberCategoryNo(member.getCategory().getId());	//设置会员类别编号
				member.setLoginCount(loginCount);	//设置会员登录次数
				member.setLevel(memberLevel);		//设置会员级别
				memberService.modify(member);				//调用会员修改方法，将所修改信息存入到DB。
				map.put("login_user", member);	//将会员信息放入到Session中
				map.put("loginType", loginType);	//将会员信息放入到Session中
				url="/member/member_main.jsp";	//转向到会员主页面
				return SUCCESS;
			}else	//登陆失败
			{
				return LOGIN;	//返回到会员登陆页面
			}
		}else	//系统管理员登陆
		{
			User user=userService.login(id, password);	//根据用户编号和密码，调用login方法。
			
			if(user!=null)	//登陆成功
			{
				
				map.put("login_user", user);	//将会员信息放入到Session中
				map.put("loginType", loginType);	//将会员信息放入到Session中
				
				
				url="/admin_index.action";	//转向到管理员主页面
				return SUCCESS;
			}else	//登陆失败
			{
				return LOGIN;	//返回到会员登陆页面
			}
			
		}
	}
	
	/**
	 * 注销方法
	 * @return
	 * @throws Exception
	 */
	public String logout()throws Exception
	{
		
		map=ActionContext.getContext().getSession();	//取得Session对象
		
		map.remove("login_user");	//将用户信息从session中移除
		url="/login.jsp";	//转向到登陆页面
		return SUCCESS;
		
	}
	
	
	public String register_member()throws Exception
	{
		hobbyList=hobbyService.findAll();	//调用查询所有爱好信息方法

		if(hobbyList!=null)
		{
			url="/register.jsp";	//转向到注册页面
			return SUCCESS;
		}
		return ERROR;
	}
	
	/**
	 * 转向登陆页面方法
	 */
	public String execute()throws Exception
	{
		url="/login.jsp";	//转向到登陆页面
		return SUCCESS;
	}
	
	/**
	 * 管理登陆主页方法
	 * @return
	 */
	public String main()
	{
		siteCategoryList=siteCategoryService.findAll();
		if(siteCategoryList!=null)
		{
			return SUCCESS;
		}
			return ERROR;
	}

    
	/**
	 * 以下都是Get和Set方法
	 */
	public String getId() 
	{
		return id;
	}

	public void setId(String id) 
	{
		this.id = id;
	}

	public String getPassword() 
	{
		return password;
	}
	public void setPassword(String password) 
	{
		this.password = password;
	}
	public String getLoginType() {
		return loginType;
	}
	public void setLoginType(String loginType)
	{
		this.loginType = loginType;
	}
	
	public UserService getUserService() 
	{
		return userService;
	}

	@Resource
	public void setUserService(UserService userService) 
	{
		this.userService = userService;
	}

	public MemberService getMemberService() 
	{
		return memberService;
	}
	
	@Resource
	public void setMemberService(MemberService memberService)
	{
		this.memberService = memberService;
	}

	public String getUrl()
	{
		return url;
	}

	public void setUrl(String url)
	{
		this.url = url;
	}

	public List<SiteCategory> getSiteCategoryList() 
	{
		return siteCategoryList;
	}

	public void setSiteCategoryList(List<SiteCategory> siteCategoryList)
	{
		this.siteCategoryList = siteCategoryList;
	}

	public SiteCategoryService getSiteCategoryService() 
	{
		return siteCategoryService;
	}

	public void setSiteCategoryService(SiteCategoryService siteCategoryService) 
	{
		this.siteCategoryService = siteCategoryService;
	}

	public HobbyService getHobbyService() 
	{
		return hobbyService;
	}
	
	@Resource
	public void setHobbyService(HobbyService hobbyService) 
	{
		this.hobbyService = hobbyService;
	}

	public List<Hobby> getHobbyList() 
	{
		return hobbyList;
	}

	public void setHobbyList(List<Hobby> hobbyList) 
	{
		this.hobbyList = hobbyList;
	}

	
}
